#!/usr/bin/python
# author Yu
# 2023年06月20日
import os
import socket
import struct
import sys

class Server:
    def __init__(self,ip,port):
        self.addr = (ip, port)  # 服务器地址
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #
        self.server_socket.bind(self.addr)  # 绑定服务器地址
        self.server_socket.listen(10)  # 监听客户端连接
        self.client_socket:socket.socket=None
    def connect(self):
        self.client_socket,client_addr=self.server_socket.accept()#接收客户端连接
        self.send_file()#发送文件
        self.client_socket.close()#关闭客户端套接字
        self.server_socket.close()#关闭服务器套接字

    def send_file(self):#发送文件
        #发送文件名
        length=len(sys.argv[1])#获取文件名长度
        self.send_train(length)#发送火车头
        self.client_socket.send(sys.argv[1].encode('utf-8'))#发送火车车厢
        #发送文件内容
        length=os.stat(sys.argv[1]).st_size#获取文件内容长度
        self.send_train(length)#发送火车头
        self.read_file()#读取文件内容并发送
    def read_file(self):#读取文件内容
        with open(sys.argv[1],'rb') as file:#打开文件
            while True:
                data_bytes=file.read(1024)#读取文件内容
                if data_bytes:#如果文件内容不为空
                    self.client_socket.send(data_bytes)#发送文件内容
                else:#如果文件内容为空
                    return b''#返回空字节流
    def send_train(self,length):#发送火车头
        train_head = struct.pack('I',length)#把python的整型数转为字节流
        self.client_socket.send(train_head)#发送火车头
server=Server('',9999)
server.connect()